package com.dkd.day20250620;


public class SolutionLCS {
    public static void main(String[] args) {

    }
    public String longestCommonSubstring(String str1, String str2) {
        if (str1 == null || str2 == null || str1.isEmpty() || str2.isEmpty()) {
            return "";
        }

        int m = str1.length();
        int n = str2.length();
        int[][] dp = new int[m + 1][n + 1]; // dp[i][j] 表示以 str1[i-1] 和 str2[j-1] 结尾的最长公共子串长度
        int maxLen = 0; // 记录最长公共子串的长度
        int endPos = 0; // 记录最长公共子串在 str1 中的结束位置

        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                if (str1.charAt(i - 1) == str2.charAt(j - 1)) {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                    if (dp[i][j] > maxLen) {
                        maxLen = dp[i][j];
                        endPos = i - 1; // 更新结束位置
                    }
                } else {
                    dp[i][j] = 0;
                }
            }
        }

        // 提取最长公共子串
        return maxLen == 0 ? "" : str1.substring(endPos - maxLen + 1, endPos + 1);
    }
}
